package com.lx.controller;

import com.lx.entity.BankCard;
import com.lx.entity.Trade;
import com.lx.entity.vo.BankCardAndUserInfo;
import com.lx.entity.vo.TradeAndCardInfoVO;
import com.lx.service.BankCardService;
import com.lx.service.impl.BankCardServiceImpl;

import java.util.List;

/**
 * @title: BankCardController
 * @projectName bankManage
 * @description: TODO
 * @author: yuanChu
 * @date: 2022/5/6  8:41
 */
public class BankCardController {

    private BankCardService bankCardService = new BankCardServiceImpl();

    //添卡
    public boolean addBankCard(BankCard bankCard){
        return bankCardService.addBankCard(bankCard);
    }

    /**
     * 根据银行卡号查询在数据库中的条数
     *
     * @param cardId 要查询的银行卡卡号
     * @return 查询到的数量
     */
    public int findCardCountById(String cardId) {

        return bankCardService.findCardCountById(cardId);
    }

    /**
     * 根据银行卡卡号查询银行卡信息以及关联用户信息
     *
     * @param cardId 要查询的银行卡卡号
     * @return 银行卡对象与持卡人姓名的关联对象
     */
    public BankCardAndUserInfo findCardInfoById(String cardId) {
        return bankCardService.findCardInfoById(cardId);
    }

    /**
     * 根据用户Id查询名下的所有银行卡信息
     * @param userId 要查询的用户Id
     * @return 银行卡列表
     */
    public List<BankCard> findCardsByUserId(Integer userId) {
        return bankCardService.findCardsByUserId(userId);
    }

    /**
     * 使用一张卡给另外一张卡进行转账
     * @param trade 转账信息
     * @return 转账的结果
     */
    public boolean transfer(Trade trade) {
        return bankCardService.transfer(trade);
    }

    /**
     * 根据卡号查余额
     * @param cardId
     * @return
     */
    public List<BankCard> findBalanceById(String cardId){
        return bankCardService.findBalanceById(cardId);
    }


    /**
     * 传入存款金额以及存入的银行卡对象进行存款操作
     *
     * @param depositNum 存款金额
     * @param bankCard   要存款的银行卡
     * @author: 元初
     */
    public boolean deposit(double depositNum, BankCard bankCard) {
        return bankCardService.deposit(depositNum, bankCard);
    }

    /**
     * 传入存款金额以及存入的银行卡对象进行存款操作
     *
     * @param withdrawal 取款金额
     * @param card   要取款的银行卡
     * @author: 元初
     */
    public boolean withdrawal(double withdrawal, BankCard card) {
        return bankCardService.withdrawal(withdrawal, card);
    }

    //传入银行卡号进行冻结操作
    public boolean freeze(String cardId) {
        return bankCardService.freeze(cardId);
    }

    public boolean updateStatusByCardId(String cardId){
        return bankCardService.updateStatusByCardId(cardId);
    }

    /**
     * 查询账户下所有的银行卡交易信息
     * @param userId 用户ID
     * @return 该用户所有的银行卡交易信息
     */
    public List<TradeAndCardInfoVO> getAccountLastMonthRecord(Integer userId) {
        return bankCardService.getAccountLastMonthRecord(userId);
    }
    /**
     * 查询某张卡的交易信息
     * @param cardNo 卡号
     * @return 查询某张卡的交易信息
     */
    public List<TradeAndCardInfoVO> selectLastMonthRecordByCard(String cardNo) {
        return bankCardService.selectLastMonthRecordByCard(cardNo);
    }
}
